﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.SqlClient;
using System.Data;
using System.Collections;

namespace Datos
{
    public class MetodosDatos
    {
        public static SqlCommand CrearComando()
        {
            string _cadenaConexion = Configuracion.CadenaConexion;
            SqlConnection _conexion = new SqlConnection();
            _conexion.ConnectionString = _cadenaConexion;
            SqlCommand _comando = new SqlCommand();
            _comando = _conexion.CreateCommand();
            _comando.CommandType = CommandType.Text;
            return _comando;
        }

        public static SqlCommand CrearComandoProc()
        {
            string _cadenaConexion = Configuracion.CadenaConexion;
            SqlConnection _conexion = new SqlConnection(_cadenaConexion);
            SqlCommand _comando = new SqlCommand("insConcurso", _conexion);
            _comando.CommandType = CommandType.StoredProcedure;
            return _comando;
        }

        public static SqlCommand CrearComandoInsArchivoTexto()
        {
            string _cadenaConexion = Configuracion.CadenaConexion;
            SqlConnection _conexion = new SqlConnection(_cadenaConexion);
            SqlCommand _comando = new SqlCommand("insArchivoTexto", _conexion);
            _comando.CommandType = CommandType.StoredProcedure;
            return _comando;
        }

        public static SqlCommand CrearComandoMod()
        {
            string _cadenaConexion = Configuracion.CadenaConexion;
            SqlConnection _conexion = new SqlConnection(_cadenaConexion);
            SqlCommand _comando = new SqlCommand("modConcurso", _conexion);
            _comando.CommandType = CommandType.StoredProcedure;
            return _comando;
        }

        public static SqlCommand CrearComandoModArchivo()
        {
            string _cadenaConexion = Configuracion.CadenaConexion;
            SqlConnection _conexion = new SqlConnection(_cadenaConexion);
            SqlCommand _comando = new SqlCommand("modArchivo", _conexion);
            _comando.CommandType = CommandType.StoredProcedure;
            return _comando;
        }

        public static SqlCommand CrearComandoModArchivo2()
        {
            string _cadenaConexion = Configuracion.CadenaConexion;
            SqlConnection _conexion = new SqlConnection(_cadenaConexion);
            SqlCommand _comando = new SqlCommand("modArchivo2", _conexion);
            _comando.CommandType = CommandType.StoredProcedure;
            return _comando;
        }

        public static int EjecutarComandoInsert(SqlCommand comando)
        {
            try
            {
                comando.Connection.Open();
                return comando.ExecuteNonQuery();
            }
            catch { throw; }
            finally
            {
                comando.Connection.Dispose();
                comando.Connection.Close();
            }
        }

        public static DataTable EjecutarComandoSelect(SqlCommand comando)
        {
            DataTable _tabla = new DataTable();
            try
            {
                comando.Connection.Open();
                SqlDataAdapter adaptador = new SqlDataAdapter();
                adaptador.SelectCommand = comando;
                adaptador.Fill(_tabla);
            }
            catch (Exception ex)
            { throw ex; }
            finally
            { comando.Connection.Close(); }
            return _tabla;
        }

        public static int EjecutarComandoDelete(SqlCommand comando)
        {
            try
            {
                comando.Connection.Open();
                return comando.ExecuteNonQuery();
            }
            catch (Exception ex) { throw ex; }
            finally
            {
                comando.Connection.Dispose();
                comando.Connection.Close();
            }
        }

        public static int EjecutarComandoUpdate(SqlCommand comando)
        {
            try
            {
                comando.Connection.Open();
                return comando.ExecuteNonQuery();
            }
            catch (Exception ex) { throw ex; }
            finally
            {
                comando.Connection.Dispose();
                comando.Connection.Close();
            }
        }

        public static Boolean ejecutarInsert(SqlCommand comando)
        {
            try
            {
                comando.Connection.Open();
                comando.ExecuteNonQuery();
                return true;
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                comando.Connection.Close();
                comando.Connection.Dispose();
            }
        }

        public static DataTable ejecutarSelect(SqlCommand comando)
        {
            DataTable _tabla = new DataTable();
            try
            {
                comando.Connection.Open();
                SqlDataAdapter adaptador = new SqlDataAdapter();
                adaptador.SelectCommand = comando;
                adaptador.Fill(_tabla);
                return _tabla;
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                comando.Connection.Close();
                comando.Connection.Dispose();
            }
        }

        public int InsertarDato(string NombreTabla, string[] NombresCampos, ArrayList Datos, int CantidadCampos)
        {
            int NumCampo = 0;
            AccesoDatos metodos = new AccesoDatos();
            int Insertar;
            string TipoDato = Datos[NumCampo].GetType().ToString();
            switch (TipoDato)
            {
                case "int":
                    {
                        Insertar = metodos.InsertarInt(NombreTabla, NombresCampos[NumCampo], Convert.ToInt32(Datos[NumCampo]), Id);
                        break;
                    }
                case "string":
                    {
                        Insertar = metodos.InsertarString(NombreTabla, NombresCampos[NumCampo], Datos[NumCampo].ToString(), Id);
                        break;
                    }
                case "bool":
                    {
                        Insertar = metodos.InsertarBool(NombreTabla, NombresCampos[NumCampo], Convert.ToBoolean(Datos[NumCampo]), Id);
                        break;
                    }
                case "Byte[]":
                    {
                        Byte[] Dato = (Byte[])Datos[NumCampo];
                        Insertar = metodos.InsertarDatos(NombreTabla, NombresCampos[NumCampo], Dato, Id);
                        break;
                    }
                default:
                    {
                        Insertar = 0;
                        break;
                    }
            }

            while (NumCampo < CantidadCampos)
            {
                NumCampo++;
                TipoDato = Datos[NumCampo].GetType().ToString();
                switch (TipoDato)
                {
                    case "int":
                        {
                            Insertar = metodos.ModificarInt(NombreTabla, NombresCampos[NumCampo], Convert.ToInt32(Datos[NumCampo]), Id);
                            break;
                        }
                    case "string":
                        {
                            Insertar = metodos.ModificarString(NombreTabla, NombresCampos[NumCampo], Datos[NumCampo].ToString(), Id);
                            break;
                        }
                    case "bool":
                        {
                            Insertar = metodos.ModificarBool(NombreTabla, NombresCampos[NumCampo], Convert.ToBoolean(Datos[NumCampo]), Id);
                            break;
                        }
                    case "Byte[]":
                        {
                            Byte[] Dato = (Byte[])Datos[NumCampo];
                            Insertar = metodos.ModificarDatos(NombreTabla, NombresCampos[NumCampo], Dato, Id);
                            break;
                        }
                    default:
                        {
                            Insertar = 0;
                            break;
                        }
                }

            }
            return NumCampo;
        }
    }
}
